ÓÔÁÒ ÔÒÅË ÄÁÔÁ ÂÁÓÅ BY ÌEN ÌINDSAY É WANTED TO WRITE A PROGRAM TO DEMONSTRATE FILE HANDLING, ESPECIALLY WITH RANDOM FILES. ÓTAR ÔREK PRESENTED ITSELF AS AN EXCELLENT TOPIC. ÔHIS SCIENCE FICTION SHOW HAS BEEN ON THE AIR FOR 20 YEARS NOW, WITH A TOTAL OF 79 EPISODES. É CREATED A DATA BASE SYSTEM THAT CAN EASILY KEEP TRACK OF ALL OF THESE SHOWS. ÖERY LITTLE IN THIS DATA BASE IS SPECIFIC TO ÓTAR ÔREK. É USED 8 FIELDS OF 27 CHARACTERS EACH TO STORE THE DATA FOR A SHOW, PLUS TWO EXTRA FIELDS THAT YOU CAN DECIDE HOW TO USE. ÔHE TITLES FOR EACH OF THE 8 MAIN FIELDS CAN VARY DEPENDING ON WHAT INFORMATION YOU WISH TO KEEP TRACK OF. ÆOR MY ÓTAR ÔREK SHOWS É CHOSE THE FOLLOWING: ÓHOW ÎAME : ×RITER : ÁIR ÄATE : ÇUEST ÓTAR: : ÃHARACTERS: : ÌOCATION : É'VE ALSO PROVIDED TWO EXTRA "USER" FIELDS. ÔHE FIRST IS AN "ÓTAR ÄATE" OF 6 CHARACTERS. ÃURRENTLY THE STAR DATE THAT IS MENTIONED (IF ANY) IS ENTERED, BUT YOU COULD PUT THE VIDEO TAPE NUMBER HERE, THE NAME OF YOUR FRIEND WHO HAS THIS SHOW ON TAPE, OR A SHORT COMMENT ON THE SHOW. ÔHE OTHER FIELD IS ONLY ONE CHARACTER. ÉT CAN BE USED TO RATE EACH SHOW (Á,Â,Ã, ETC). É USE IT TO MARK THE SHOWS THAT É HAVE SEEN. ÉF MARKED, THE ENTIRE SHOW IS SHOWN IN REVERSE (WHITE ON BLACK). ÃHARLES ÐHILLIPS WAS NICE ENOUGH TO TYPE IN ALL 79 EPISODES. ÏNCE YOU HAVE A DATA BASE FILLED WITH INFORMATION, IT IS EASY AND FUN TO USE. ÆOR EXAMPLE, LET'S SAY YOUR FAVORITE AUTHOR IS ÈARLEN ÅLLISON. ÕSING THE DATA BASE SYSTEM, YOU CAN CHOOSE THE ÓEARCH OPTION, AND IT WILL LIST EVERY SHOW WRITTEN BY HIM. ÔHE NICE THING ABOUT THIS IS THAT THE SYSTEM USES ÃÏÍÁÌ'S ÉÎ OPERATOR TO FIND THE MATCHES. ÔHUS, YOU CAN ASK THE SYSTEM TO LOOK FOR "AR" AND IT WILL FIND BOTH ÈARLEN ÅLLISON AND ÄAVID ÇARROLD. ÒEMEMBER, THE SEARCH IS VERY PICKY ON UPPER OR LOWER CASE. ÔHUS, ÃYB WILL NOT MATCH ÃÙÂ. ÓINCE THIS SYSTEM USES A RANDOM FILE FOR ITS DATA, IT IS EASY TO RANDOMLY DISPLAY ANY SHOW. ÊUST TYPE IN THE SHOW NUMBER, AND INSTANTLY (ALMOST) ITS INFORMATION IS DISPLAYED. ÔO SEE THE NEXT SHOW JUST TYPE + (PLUS SIGN). ÔO SEE THE PREVIOUS SHOW TYPE - (MINUS SIGN). ÁNOTHER NICE FEATURE OF THIS SYSTEM IS ÂÒÏ×ÓÅ. ÉT ALLOWS YOU TO SCAN OVER ALL THE ENTRIES, ONE AFTER ANOTHER, STARTING AFTER THE SHOW CURRENTLY DISPLAYED. ÉT EVEN HAS A VARIABLE PAUSE BETWEEN SHOWS. ÆIVE SECONDS IS THE DEFAULT, BUT FOR A FAST SCAN, USE 0 FOR THE LENGTH OF PAUSE. ÎÏÔÅÓ ÁÂÏÕÔ ÔÈÅ ÐÒÏÇÒÁÍ ÔHE VARIABLE MARK$ IS USED TO DETERMINE WHETHER OR NOT THE INFORMATION DISPLAY IS NORMAL OR REVERSE FIELD. ÔHE SEVENTH LINE OF THE PROGRAM IS: DISPLAY(MARK$<> " ") ÄISPLAY IS THE NAME OF THE PROCEDURE THAT PRINTS THE INFORMATION ABOUT THE SHOW TO THE SCREEN. ÉT HAS ONE NUMERIC PARAMETER. ÉF THE PARAMETER IS ÆÁÌÓÅ (A VALUE OF 0) THEN THE INFORMATION IS DISPLAYED NORMALLY. ÉF IT IS ÔÒÕÅ (A VALUE NOT EQUAL TO 0) THEN THE INFORMATION IS DISPLAYED IN REVERSE FIELD. ÍARK$<> " " IS A COMPARISON THAT WILL ALWAYS BE EITHER ÔÒÕÅ OR ÆÁÌÓÅ, THUS PROVIDING THE PROPER PARAMETER. ÎOTICE THAT TO HAVE THE REVERSE DISPLAY, EACH VALUE PRINTED MUST BE THE CORRECT LENGTH BECAUSE THE REVERSE FIELD WILL STOP AT THE LAST CHARACTER. ÔHE LENGTH USED IN THIS PROGRAM IS 27. ÔHUS, IF THE SHOW NAME IS LESS THAN 27 CHARACTERS, É HAD TO DO SOMETHING TO PRINT REVERSE FIELD SPACES AT THE END OF THE NAME. É LET ÃÏÍÁÌ TAKE CARE OF THIS FOR ME BY USING SUBSTRING NOTATION WHEN INPUTING THIS DATA (FROM BOTH KEYBOARD INPUT AND FILE INPUT). ÆOR EXAMPLE: DIM NAME$ OF 27 INPUT "NAME:": NAME$ PRINT CHR$(18)+NAME$ PRINT "LENGTH IS";LEN(NAME$) INPUT "NAME:": NAME$(1:27) PRINT CHR$(18)+NAME$ PRINT "LENGTH IS";LEN(NAME$) ÒUN THAT PROGRAM AND TYPE ÔÅÓÔ AS THE NAME BOTH TIMES IT ASKS. ÔHE FIRST TIME IT HAS A LENGTH OF 4. ÔHE LAST TIME IT HAS A LENGTH OF 27 (THE VALUE WAS PADDED WITH SPACES AT THE END). ÐRINTING IT EACH TIME IN REVERSE FIELD SHOWS HOW THE (1:27) TAKES CARE OF FORMATTING PROBLEMS FOR ME! ÃALCULATING THE CORRECT RECORD LENGTH IS ALSO IMPORTANT WHEN USING RANDOM FILES. ÕSE THE MAXIMUM POSSIBLE LENGTH AS THE LENGTH FOR THE FILE. ÉN THIS CASE É HAD 8 FIELDS OF 27 CHARACTERS, 1 FIELD OF 11 CHARACTERS, AND 1 FIELD OF 1 CHARACTER. ÓINCE EACH FIELD IS A STRING, É ALSO MUST ADD A 2 BYTE COUNTER FOR EACH FIELD. ÔHUS 8*29 PLUS 13 PLUS 3 GIVES 248. ÔHE SMALLEST RECORD SIZE É CAN USE AND BE SURE TO HOLD ALL POSSIBLE DATA IS 248, WHICH É SET IN THE START'UP PROCEDURE. ÔO CALCULATE RECORD LENGTH WHEN USING ×ÒÉÔÅ ÆÉÌÅ REMEMBER THESE RULES: * Á REAL NUMBER ALWAYS NEEDS 5 BYTES * ÁN INTEGER NEEDS 2 BYTES IN ÃÏÍÁÌ 2.0 ÁN INTEGER NEEDS 5 BYTES IN ÃÏÍÁÌ 0.14 * Á STRING NEEDS ITS MAXIMUM LENGTH ÐÌÕÓ 2 BYTES FOR A LENGTH COUNTER ËNOWING HOW MANY RECORDS HAVE BEEN WRITTEN IS ALSO IMPORTANT WHEN USING RANDOM FILES. ÉF YOU ATTEMPT TO READ A RECORD PAST THE LAST EXISTING ONE, AN ERROR OCCURS! Á COMMON WAY TO KEEP TRACK OF THE LAST RECORD NUMBER IS TO ×ÒÉÔÅ IT INTO THE FIRST RECORD OF THE FILE: WRITE FILE 2,1: LAST'RECORD ÌAST'RECORD IS A VARIABLE THAT HOLDS THE NUMBER OF THE LAST RECORD WRITTEN TO THE FILE. ÎOW, EACH TIME YOU USE THAT FILE, YOU CAN SIMPLY READ THE LAST RECORD NUMBER FROM THE FILE LIKE THIS: READ FILE 2,1: LAST'RECORD ÔHE ONLY SIDE EFFECT OF THIS IS THAT YOU CANNOT USE THE FIRST RECORD FOR REGULAR DATA. ÏFTEN, THIS IS NOT A PROBLEM. ÆOR EXAMPLE, IN OUR ORDER PROCESSING SYSTEM PROGRAMS (RUNNING UNDER ÉÂÍ Ðà ÃÏÍÁÌ) ÃÏÍÁÌ ÔODAY SUBSCRIBERS ARE PART OF A RANDOM FILE, STORED BY THEIR SUBSCRIBER NUMBER. ÓINCE É USE THE FIRST RECORD TO HOLD THE LAST SUBSCRIBER'S NUMBER, É STARTED MY SUBSCRIBER COUNT WITH 2. ÔHUS THERE IS NO SUBSCRIBER NUMBER 1. ÂUT IN KEEPING TRACK OF ÓTAR ÔREK SHOWS, THERE IS A SHOW NUMBER 1. ÓINCE IT CAN'T BE WRITTEN INTO RECORD NUMBER 1, WE SIMPLY ADD 1 TO THE SHOW NUMBER TO GIVE THE RECORD NUMBER (READ THIS SENTENCE TWICE - IT MAKES SENSE). ÔHUS SHOW NUMBER 1 IS STORED IN RECORD NUMBER 2. ÂOTH READ'RECORD AND WRITE'RECORD PROCEDURES DO THE RECORD NUMBER CONVERSION. ÁNOTHER THING É TRY TO DO IS KEEP MY FILES CLOSED AS MUCH AS POSSIBLE. ÏN A ÃOMMODORE DISK, ALL FILES MUST BE PROPERLY CLOSED OR THEY CAN'T BE OPENED LATER. ÓO, É TAKE PRECAUTIONS (IN CASE OF A POWER OUTAGE ETC.) AND KEEP THE FILE CLOSED WHEN IT IS NOT DIRECTLY BEING USED. ÆOR EXAMPLE, WHILE SEARCHING THE FILE FOR MATCHES, É USE THE PROCEDURE READ'RECORD DIRECTLY, AND DON'T CLOSE THE FILE AFTER EACH RECORD IS READ. É ONLY CLOSE THE FILE AFTER É FIND A MATCH. ÈOWEVER, WHEN JUST GETTING INFORMATION ABOUT ONE SHOW, É HAVE THE PROCEDURE READ'IT WHICH FIRST OPENS THE FILE, THEN READS THE RECORD, THEN CLOSES THE FILE. ÔHUS THE FILE IS CLOSED WHILE É LOOK AT THAT RECORD (AND POSSIBLY EDIT IT). ÎOTE THAT É ALWAYS CLOSE THE FILE AFTER É WRITE TO IT. ÔHUS É ONLY HAVE ONE WRITE'RECORD PROCEDURE. ÒEMEMBER, THE DATA IS ONE OF THE MOST IMPORTANT PARTS OF THIS DATA BASE SYSTEM! ÔHE DATA IS IN THE FILE "RAN.STARTREK".